home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Texty / crackme / tut-en.txt < prev    next >
Encoding:
Text File  |  1999-04-05  |  13.7 KB  |  390 lines

  1.  
  2.             Immortal Descendants CrackMe 4.0
  3.         Tutorial version 1.0 (4 avril 99) by Lucifer48
  4.  
  5.  
  6. English is not my native language.
  7. I *only* used Soft-Ice v3.24
  8.  
  9.  
  10. ===============
  11. 1. INTRODUCTION
  12. ===============
  13.  
  14. We go into the code by a BPX HMEMCPY, few F12/F10 and we are here:
  15.  
  16. XXXX:00402260  PUSH EBX                     ;handle of the window's crackme
  17. XXXX:00402261  PUSH 0040BE28                ;serial
  18. XXXX:00402266  PUSH 0040BDE0                ;group
  19. XXXX:0040226B  PUSH 0040BF30                ;name
  20. XXXX:00402270  CALL 00401CF0                ;Everything is there!
  21. XXXX:00402275  ADD  ESP,10                  ;*pop pop pop pop*
  22. XXXX:00402278  CMP  WORD PTR [0040BE20],28  ;If FFFF, our serial is a bad one
  23. XXXX:00402280  JNZ  004022A0
  24.  
  25. Well, let's go into call 00401CF0...
  26.  
  27. ============================
  28. 2. HOLD ON! JUST A MINUTE...
  29. ============================
  30.  
  31. To bypass the check of the number of try. 3 chances for solving this crackme; it's not enougth.
  32. In the code:
  33.  
  34. XXXX:004022A0  MOV  AX,[0040A074]            ;numbers of tests already done
  35. XXXX:004022A6  INC  AX
  36. XXXX:004022A8  MOV  [0040A074],AX            ;save
  37. XXXX:004022AE  CMP  AX,0003
  38. XXXX:004022B2  JNZ  004022E6                 ;3 tests = Button "Validate" disabled
  39.  
  40. We change INC AX into NOP NOP and it's allright.
  41. For those who wants to put in AX a value >3, TORN@ADO thought about this.
  42. A MessageBox appears:
  43.  
  44. "You're using a window editing tool like THE CUSTOMISER
  45.  You have had 3 chances for entering the right code!
  46.  Do you think that's fair?"
  47.  
  48. ==================
  49. 3. LET'S CMP [1/5]
  50. ==================
  51.  
  52. Going into the call 00401CF0
  53.  
  54. ...
  55. XXXX:00401CF9  CALL 004019F0                 ;small and unseful
  56. XXXX:00401CFE  ADD  ESP,04                   ;pop-pop
  57. XXXX:00401D01  PUSH EBX
  58. XXXX:00401D02  CALL 00401720                 ;HERE!
  59. XXXX:00401D07  ADD  ESP,04
  60. XXXX:00401D0A  CMP  EAX,01
  61. XXXX:00401D0D  JZ   00401D1D                 ;to go further we must have EAX=1
  62. XXXX:00401D0F  MOV  WORD PTR [0040BE20],FFFF ;bad serial!
  63. ...
  64. XXXX:00401D1C  RET                           ;ret
  65.  
  66. We must exit the CALL 00401720 with EAX=1:
  67.  
  68. XXXX:00401722  MOV   ESI,[ESP+0C]            ;d ESI : our serial
  69. XXXX:00401726  PUSH  EDI
  70. XXXX:00401727  MOV   AL,[ESI+01]             ;read the 2nd character
  71. XXXX:0040172A  MOV   CL,[ESI+02]             ;read the 3rd character
  72. XXXX:0040172D  XOR   AL,49
  73. XXXX:0040172F  XOR   CL,44
  74. XXXX:00401732  MOVSX EAX,AL
  75. XXXX:00401735  MOV   DL,[ESI+03]             ;read the 4th character
  76. XXXX:00401738  MOV   BL,[ESI]                :read the 1st character
  77. XXXX:0040173A  XOR   DL,39
  78. XXXX:0040173D  XOR   BL,54
  79. XXXX:00401740  MOVSX ECX,CL
  80. XXXX:00401743  MOVSX EDI,DL
  81. XXXX:00401746  MOV   DL,[ESI+04]             ;read the 5th character
  82. XXXX;00401749  XOR   DL,39
  83.  
  84. Then, 5 cmp, if everything goes right then EAX=1 otherwise EAX=0
  85. CMP BL,1D  ( 1D XOR 54 = 49 [I] )
  86. CMP EAX,0D ( 0D XOR 49 = 44 [D] )
  87. CMP ECX,07 ( 07 XOR 44 = 43 [C] )
  88. CMP EDI,0D ( 0D XOR 39 = 34 [4] )
  89. CMP EDX,09 ( 09 XOR 39 = 30 [0] )
  90.  
  91. end of CALL 00401720, the beginning of the serial is IDC40.
  92. Continue in 00401D1D.
  93.  
  94. ==================================
  95. 4. LET'S CMP [2/5] : XOR MY FRIEND
  96. ==================================
  97.  
  98. XXXX:00401D2D  CALL  00401A20                 ;100% unuseful
  99. XXXX:00401D32  ADD   ESP,10
  100. XXXX:00401D35  PUSH  EBX
  101. XXXX:00401D36  CALL  00401790
  102. XXXX:00401D3B  ADD   ESP,10
  103. XXXX:00401D3E  CMP   EAX,01
  104. XXXX:00401D41  JZ    00401D51                 ;the same as above...
  105. XXXX:00401D43  MOV   WORD PTR [0040BE20];FFFF ;bad serial...
  106. ...
  107. XXXX:00401D50  RET                            ;ret
  108.  
  109. Our goal: exit the call 00401790 with EAX=01.
  110.  
  111. XXXX:00401790  MOV   EAX,[ESP+04]             ;d EAX : our serial
  112. XXXX:00401794  PUSH  EBX
  113. XXXX:00401795  PUSH  ESI
  114. XXXX:00401796  MOV   CL,[EAX+07]              ;read the 8th character
  115. XXXX:00401799  XOR   CL,52
  116. XXXX:0040179C  MOV   DL,[EAX+08]              :read the 9th character
  117. XXXX:0040179F  XOR   DL,45
  118. XXXX:004017A2  MOV   BL,[EAX+09]              ;read the 10th character
  119. XXXX:004017A5  XOR   BL,53
  120. XXXX:004017A8  MOV   AL,[EAX+06]              :read the 7th character
  121. XXXX:004017AB  MOVSX ECX,CL
  122. XXXX:004017AE  MOVSX EDX,DL
  123. XXXX:004017B1  MOVSX ESI,BL
  124. XXXX:004017B4  XOR   AL,54
  125.  
  126. Then (again), few cmp:
  127. CMP AL,11  ( 11 XOR 54 = 45 [E] )
  128. CMP ECX,06 ( 06 XOR 52 = 54 [T] )
  129. CMP EDX,07 ( 07 XOR 45 = 42 [B] )
  130. CMP ESI,1F ( 1F XOR 53 = 4C [L] )
  131.  
  132. End of call 00401790, with EAX=1
  133.  
  134. For the moment, our serial is like IDC40*ETBL***...
  135. "*" is any character.
  136. Go on XXXX:00401D51.
  137.  
  138. =============================
  139. 5. LET'S CMP [3/5] : THE DATE
  140. =============================
  141.  
  142. XXXX:00401D51  PUSH EBX
  143. XXXX:00401D52  CALL 004017E0                  ;HERE
  144. XXXX:00401D57  ADD  ESP,04
  145. XXXX:00401D5A  CMP  EAX,01
  146. XXXX:00401D5D  JZ   00401D6D
  147. XXXX:00401D5F  MOV  DWORD PTR [0040BE20],FFFF
  148. ...
  149. XXXX:00401D6C  RET                            :ret
  150.  
  151. We must (again) exit the CALL 004017E0 with EAX=1
  152.  
  153. ...
  154. XXXX:00401851  PUSH  EAX                      ;d EAX : the 4 last characters of my serial.
  155. XXXX:00401852  CALL  00403480                 ;DEC->HEX. Result in EAX.
  156. XXXX:00401857  ADD   ESP,04
  157. XXXX:0040185A  MOV   ESI,EAX                  ;save the result.
  158. XXXX:0040185C  CALL  004016A0                 ;HERE! (GetLocalTime...)
  159. XXXX:00401861  SUB   EAX,ESI
  160. XXXX:00401863  POP   EDI
  161. XXXX:00401864  POP   ESI
  162. XXXX:00401865  CMP   EAX,01
  163. XXXX:00401868  SBB   EAX,EAX                  ;we must have CF=1
  164. XXXX:0040186A  ADD   ESP,04
  165. XXXX:0040186D  NEG   EAX                      ;NEG FFFFFFFF = 00000001
  166. XXXX:0040186F  RET
  167.  
  168. In the call 004016A0:
  169.  
  170. XXXX:004016A8  PUSH  EAX
  171. XXXX:004016A9  CALL  [KERNEL32!GetLocalTime]  ;TORN@DO like this call...
  172. XXXX:004016AF  XOR   EDX,EDX
  173. XXXX:004016B1  XOR   EAX,EAX
  174. XXXX:004016B3  MOV   DX,[ESP+06]              ;month
  175. XXXX:004016B8  XOR   ECX,ECX
  176. XXXX:004016BA  MOV   AX,[ESP+0A]              ;day
  177. XXXX:004016BF  IMUL  EDX,EAX
  178. XXXX:004016C2  MOV   CX,[ESP+0E]              ;minute
  179. XXXX:004016C7  MOV   EAX,[ESP+0C]             ;hour
  180. XXXX:004016CB  AND   EAX,0000FFFF
  181. XXXX:004016D0  IMUL  EAX,ECX
  182. XXXX:004016D3  MOVSX ECX,BYTE PTR [0040BF60]  ;1st letter of (*)
  183. XXXX:004016DA  ADD   EDX,EAX
  184. XXXX:004016DC  MOV   EAX,[ESP+04]             ;year
  185. XXXX:004016E0  SUB   EDX,ECX
  186. XXXX:004016E2  AND   EAX,0000FFFF
  187. XXXX:004016E7  LEA   ESI,[EAX+EDX]
  188. XXXX:004016EA  PUSH  ESI                      ;save the result
  189. XXXX:004016EB  CALL  00401290                 ;Soft Ice (for win95/98) installed ?
  190. XXXX:004016F0  ADD   ESP,04
  191. XXXX:004016F3  TEST  EAX,EAX
  192. XXXX:004016F5  JZ    004016FD
  193. XXXX:004016F7  ADD   ESI,00000143             ;if "si95" is installed ESI=ESI+143
  194. XXXX:004016FD  PUSH  ESI
  195. XXXX:004016FE  CALL  004012D0                 ;Soft Ice (for winNT) installed ?
  196. XXXX:00401703  ADD   ESP,04
  197. XXXX:00401706  TEST  EAX,EAX
  198. XXXX:00401708  JZ    00401710
  199. XXXX:0040170A  ADD   ESI,00000271             ;if "siNT" is installed ESI=ESI+143
  200. XXXX:00401710  MOV   EAX,ESI
  201. XXXX:00401712  POP   ESI
  202. XXXX:00401713  ADD   ESP,10
  203. XXXX:00401716  RET                            ;ret
  204.  
  205. (*)
  206. [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion]
  207. "RegisteredOwner"="LuCiFeR48"
  208.  
  209. So, our 4 last characters of our serial is the encryption of the date and knowing if Soft-Ice is
  210. installed.
  211. There is a new serial every minute!
  212.  
  213. Continue in XXXX:00401D6D
  214.  
  215. ====================================================
  216. 6. LET'S CMP [4/5] : FirstInstallDateTime OF WINDOWS
  217. ====================================================
  218.  
  219. XXXX:00401D71  CALL  00401B70                 ;unuseful
  220. XXXX:00401D76  ADD   ESP,10
  221. XXXX:00401D79  MOV   EAX,[0040C380]
  222. XXXX:00401D7E  PUSH  EAX
  223. XXXX:00401D7F  PUSH  EBX
  224. XXXX:00401D80  CALL  00401870                 ;HERE
  225. XXXX:00401D85  ADD   ESP,08
  226. XXXX:00401D88  CMP   EAX,01
  227. XXXX:00401D8B  JZ    00401D9B                 ;must have EAX=1
  228. XXXX:00401D8D  MOV   WORD PTR [0040BE20],FFFF
  229. ...
  230. XXXX:00401D9A  RET                            ;retour (bad cracker)
  231.  
  232. Explorons le call 00401870:
  233.  
  234. (**) copy a part of the serial from 6th character to 12th character (included) so 7 numbers.
  235. ...
  236. XXXX:004018BB  LEA  EAX,[ESP+10]             ;a part of our serial (**)
  237. ...                                          ;then DEC=>HEX
  238. XXXX:004018EE  CALL  00403559                ;give a hexa number
  239. XXXX:004018F3  SUB   EAX,ESI                 ;we must have EAX=ESI to win!
  240. XXXX:004018F5  POP   EBP
  241. XXXX:004018F6  POP   EDI
  242. XXXX:004018F7  CMP   EAX,01
  243. XXXX:004018FA  SBB   EAX,EAX
  244. XXXX:004018FC  POP   ESI
  245. XXXX:004018FD  NEG   EAX
  246. XXXX:004018FF  POP   EBX
  247. XXXX:00401900  ADD   ESP,64
  248. XXXX:00401803  RET                           ;end of call 00401870
  249.  
  250. A few words on the call 00403559
  251. ...
  252. XXXX:004018CA  MOV   EAX,[0040BEFC]                  ;(#)
  253. XXXX:004018CF  MOV   [ESP+10],EAX
  254. XXXX:004018D3  MOV   DWORD PTR [ESP+14],00000000
  255. XXXX:004018DB  FILD  QWORD PTR [ESP+10]              ; What are those instructions?
  256. XXXX:004018E1  CALL  00403559                        ;
  257. XXXX:004018E6  FMUL  REAL8 PTR [00409020]            ; I don't understand those lines
  258. XXXX:004018EC  FSUBP ST(1),ST                        ; help me!
  259. XXXX:004018EE  CALL  0040264C                        ;
  260. XXXX:004018F3  SUB   EAX,ESI                         ;subtract the result with our hexa number
  261. ...
  262.                RET
  263.  
  264. (#) This number is from the 4 bytes read in
  265. [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion]
  266. FirstInstallDateTime
  267. And a small modification...
  268. XXXX:00401E70  MOV   EBP,[USER32!wsprintfA]
  269. XXXX:00401E76  PUSH  EAX                      ;the 4 bytes of "FirstInstallDateTime"
  270. XXXX:00401E77  PUSH  0040A6C8
  271. XXXX:00401E7C  PUSH  0040BF90                 ;area for the result
  272. XXXX:00401E81  CALL  EBP
  273.  
  274. The result (in EAX) of the call 00403559, must be converted in hexa and must belong in the serial.
  275.  
  276. Example, for me:   IDC40-ETBL22226617393-xxxx
  277.                    ----- ----    ------- ----
  278. LET'S CMP          [1/5] ----    ------- ----
  279. part:                    [2/5]   ------- ----
  280.                                   [4/5]  ----
  281.                                          [3/5]
  282.  
  283. -: any character
  284. xxxx: to replace by the result of the encryption of the data (changes every minute)
  285.       (put a BPX 00401865, and R EAX=0, et go on...)
  286.  
  287. Next, in XXXX:00401D9B
  288.  
  289. =========================================
  290. 7. LET'S CMP [5/5] : Encrytion Name+Group
  291. =========================================
  292.  
  293. XXXX:00401D9F  CALL 00401C30                 ;unuseful
  294. XXXX:00401DA4  ADD  ESP,10
  295. XXXX:00401DA7  PUSH EBX
  296. XXXX:00401DA8  CALL 00401910                 ;HERE
  297. XXXX:00401DAD  ADD  ESP,04
  298. XXXX:00401DB0  CMP  EAX,01
  299. XXXX:00401DB3  JZ   00401DC3                 ;the end of the crackme!
  300. XXXX:00401DB5  MOV  WORD PTR [0040BE20],FFFF
  301. ...
  302. XXXX:00401DC2  RET
  303.  
  304.  
  305. In XXXX:00401DC3, it's the end of the crackme
  306. But before...let's visit the call 00401910.
  307.  
  308. ...
  309. XXXX:00401972  LEA  EDX,[ESP+08]            ;D EDX : a part of our serial (***)
  310. XXXX:00401976  PUSH EAX
  311. XXXX:00401977  CALL 00403480                ;DEC=>HEX (result in EAX)
  312. XXXX:0040197C  ADD  ESP,04                  ;pop
  313. XXXX:0040197F  MOV  EDI,EAX                 ;save the result in EDI
  314. XXXX:00401981  CALL 00401590                ;In EAX, a new hexa number (few +)
  315. XXXX:00401986  MOV  ESI,EAX
  316. XXXX:00401988  CALL 00401540                ;In EAX, a new hexa number ("RegisteredOwner")
  317. XXXX:0040198D  XOR  ESI,EAX
  318. XXXX:0040198F  PUSH 0040BDE0                ;group
  319. XXXX:00401994  PUSH 0040BF30                ;nom
  320. XXXX:00401999  CALL 004015E0
  321. XXXX:0040199E  ADD  ESP,08
  322. XXXX:004019A1  ADD  EAX,ESI
  323. then:
  324. EAX=EAX*DB (EAX times 219)
  325. ECX=4*ECX
  326. ECX=ECX-EAX
  327. ECX=64*ECX
  328. ECX=ECX-EAX
  329. ECX=2*ECX
  330. XXXX:004019B8  MOV [ESP+08],ECX
  331.  
  332. (***) The serial is (definitively) like:
  333. IDC40-ETBL-24654564564-6617393-xxxx
  334.            -----------
  335. LET'S CMP    [5/5]
  336.            In 00401972, d EDX : you see 24654564564.
  337.  
  338. | About the call 00401540, it adds every characters of the "RegisteredOwner" (except the last)
  339. | Example for me:
  340. | ------IDCRKME40!.data+1F60----------------------------------------------------- 
  341. | XXXX:0040BF60  4C 75 43 69 46 65 52 34 38 00 00 00 00 00 00 00  LuCiFeR48......
  342. |
  343. | 4C+75+43+69+46+65+52+34 = 29E = result of EAX
  344.  
  345. | About the call 00401590, each number of character of the "RegisteredOwner" (except the last)
  346. | is multiplicated par 2 and make an add of all of this.
  347. | Example: 1*2 + 2*2 + 3*2 + 4*2 + 5*2 + 6*2 + 7*2 + 8*2 = (1+2+3+4+5+6+7+8)*2 = 24*2 = 48
  348. | With letters: if 'n' is the length of the string of the "RegisteredOwner"
  349. | We've got the formula: (n-1)*n
  350. | Length of "LuCiFeR48" = 9 and so 9*8=48
  351. | Remarque: everything is calculated in hexa
  352.  
  353. Few words on the call 004015E0,
  354. Each character (except the last) is multiplicated by A29 and added.
  355. We add the ascii value of character of the group (except the last).
  356. The result is multiplicated by B (11)
  357.  
  358. [...]
  359.  
  360. ...
  361. XXXX:004019C4  FILD   QWORD PTR [ESP+08]       ;
  362. XXXX:004019C8  FLD    ST(0)                    ;
  363. XXXX:004019CA  FSIN                            ; I don't understand this!
  364. XXXX:004019CC  FMUL   REAL8 PTR [00409028]     ;
  365. XXXX:004019D2  FSUBP  ST(1),ST                 ;
  366. XXXX:004019D4  CALL   0040264C                 ;
  367. XXXX:004019D9  SUB    EAX,EDI                  ;subtract the result with our hexa number
  368. ...
  369. XXXX:004019DD  CMP    EAX,01                   ;EAX=00 = good serial
  370. XXXX:004019E0  SBB    EAX,EAX
  371. XXXX:004019E2  ADD    ESP,64
  372. XXXX:004019E5  NEG    EAX
  373. XXXX:004019E7  RET
  374.  
  375.  
  376. ========================
  377. 8. FINALY: MY OWN SERIAL
  378. ========================
  379.  
  380. Name: Lucifer48
  381. Group: None
  382. Serial: IDC40-ETBL-605573733-6617393-xxxx
  383.  
  384. xxxx: to replace by the encrytped date (see part 5. LET'S CMP [3/5] )
  385.  
  386. /* FirstInstallDateTime: E1 B1 39 25
  387.    RegisteredOwner: LuCiFeR48
  388. */
  389.  
  390.